import java.util.Vector;
/**
 * Universidad del Valle de Guatemala
 * Algoritmos y Estructuras de Datos
 * Sección: 20
 * @author Rodrigo Avelar, carné: 11192
 * Descripción: implementacion de una pila en una estructura Vector
 */
public class StackVector <E> implements Stack<E>{

    protected Vector<E> data;
    
    /**
     * constructor StackVector
     * pre:
     * post: construye una pila nueva y vacia
     */
    public StackVector(){
        data = new Vector<E>();
    }
    
    /**
    * push:void
    * pre:
    * post: se añade a la pila el item 
    * @param item E de tipo de dato genérico
    */
    @Override
    public void push(E item) {
        data.add(item);
    }

    /**
    * pop:E
    * pre: la pila no esta vacia
    * post: Será retira el ultimo elemento que se habia introducido a la pila
    * @return tipo de dato genérico
    */ 
    @Override
    public E pop() {
        return data.remove(size()-1);
    }
    
    /**
    * peek:E
    * pre: la pila no esta vacia
    * post: El último valor en la pila es retornado
    * @return tipo de dato genérico 
    */
    @Override
    public E peek() {
        return data.get(size()-1);
    }

    /**
    * empty:boolean
    * pre:
    * post: retorna true si y solo si la pila esta vacia
    * @return true si la pila esta vacia o false si hay algun dato
    */
    @Override
    public boolean empty() {
        return size() == 0;
    }

    /**
    * size:int
    * pre:
    * post: retorna el numero de elementos que hay en la pila
    * @return numero de elementos que hay en la pila
    */
    @Override
    public int size() {
        return data.size();
    }
    
}
